package com.hedl.practice.diyJava.regexs.study_group_matching.test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");     //此方法用于从正则表达式字符串创建模式对象。
        Matcher m = p.matcher("010-12345678");      //此方法用于为给定的输入字符串创建匹配器对象。
        if (m.matches()){       //此方法尝试将整个输入序列与模式匹配。
            //此方法返回给定组在上一次匹配操作中捕获的输入子序列。在代码中，第1组捕获电话号码的前3或4位数字，而第2组捕获以下7或8位数字。
            String g1 = m.group(1);
            String g2 = m.group(2);
            System.out.println(g1);
            System.out.println(g2);
        }else {
            System.out.println("匹配失败");
        }


        System.out.println("==================Pattern===============");
        /**
         * 在前面的代码中用到的正则表达式代码是String.matches()方法，
         * 而我们在分组提取的代码中用的是java.util.regex包里面的Pattern类和Matcher类。
         * 实际上这两种代码本质上是一样的，因为String.matches()方法内部调用的就是Pattern和Matcher类的方法。
         */
        Pattern pattern = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})");
        pattern.matcher("010-12345678").matches();      //true
        pattern.matcher("021-123456").matches();        //false
        pattern.matcher("022#1234567").matches();       //false

        //获得Matcher对象
        Matcher matcher = pattern.matcher("010-12345678");
        if (matcher.matches()){
            String whole = matcher.group(0);        // "010-12345678", 0表示匹配的整个字符串
            String area = matcher.group(1);     // "010", 1表示匹配的第1个子串
            String tel = matcher.group(2);      // "12345678", 2表示匹配的第2个子串
            System.out.println(whole);
            System.out.println(area);
            System.out.println(tel);
        }
        /**
         * 使用Matcher时，必须首先调用matches()判断是否匹配成功，匹配成功后，才能调用group()提取子串。
         * 利用提取子串的功能，我们轻松获得了区号和号码两部分。
         */
    }
}
